.TH std::jthread::native_handle 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::jthread::native_handle \- std::jthread::native_handle

.SH Synopsis
   [[nodiscard]] native_handle_type native_handle();  \fI(since C++20)\fP
                                                      (not always present)

   Returns the implementation defined underlying thread handle.

.SH Parameters

   \fI(none)\fP

.SH Return value

   Implementation defined handle type representing the thread.

.SH Exceptions

   May throw implementation-defined exceptions.

.SH Example

   Uses native_handle to enable realtime scheduling of C++ threads on a POSIX system.


// Run this code

 #include <chrono>
 #include <cstring>
 #include <iostream>
 #include <mutex>
 #include <pthread.h>
 #include <thread>

 std::mutex iomutex;
 void f(int num)
 {
     std::this_thread::sleep_for(std::chrono::seconds(1));

     sched_param sch;
     int policy;
     pthread_getschedparam(pthread_self(), &policy, &sch);
     std::lock_guard<std::mutex> lk(iomutex);
     std::cout << "Thread " << num << " is executing at priority "
               << sch.sched_priority << '\\n';
 }

 int main()
 {
     std::jthread t1(f, 1), t2(f, 2);

     sched_param sch;
     int policy;
     pthread_getschedparam(t1.native_handle(), &policy, &sch);
     sch.sched_priority = 20;
     if (pthread_setschedparam(t1.native_handle(), SCHED_FIFO, &sch))
         std::cout << "Failed to setschedparam: " << std::strerror(errno) << '\\n';


 }

.SH Output:

 Thread 2 is executing at priority 0
 Thread 1 is executing at priority 20
